package main

import (
	"fmt"
	"unsafe"
)

func main() {

	var s1 string = "hello world !"
	// s1[0] = 'a'   // 报错， string 是不可变的
	s1 = "123"                     // 但是引用是可变的
	fmt.Println(s1)                //123
	fmt.Println(unsafe.Sizeof(s1)) //16

	// 使用反引号输出带特殊字符的字符串 ``
	var s2 = `
	import(
		"fmt"
		"unsafe"
	)
	
	func main() {
	
		var s1 string = "hello world !"
		// s1[0] = 'a' // string 是不可变的
		s1 = "123" // 但是引用是可变的
		fmt.Println(s1) //123
		fmt.Println(unsafe.Sizeof(s1)) //16
	
		// 使用反引号输出带特殊字符的字符串 
	}
	`
	fmt.Println(s2)

	// 拼接字符串
	var s3 string = "hello world" +
		"this is nice day" +
		"that is OK !"
	fmt.Println(s3)

	// 测试rune == int32
	s4 := "人么"
	fmt.Printf("len(s4) = %v\n", len(s4))                 // 3 因为一个汉字占了3个字节
	fmt.Printf("len([]rune(s4)) = %v\n", len([]rune(s4))) //2，因为[]runr(str)将汉字转化为了int32类型字节数组
	fmt.Printf("[]int32(s4) = %d\n", []int32(s4))
	fmt.Printf("[]rune(s4) = %d\n", []rune(s4)) // [20154]
	fmt.Printf("%v", string([]rune(s4)))
}
